﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades.Reclamos;
using WebApplication.Reclamos;

public partial class frmReclamo : System.Web.UI.Page
{
    #region ATRIBUTOS
    
    protected IControllerRecReclamo _recController;

   
    public List<RecActividades> listaActividades {
        get {
            if (this.ViewState["listaActividades"] != null)
            {
                return (List<RecActividades>)(this.ViewState["listaActividades"]);
            }
            return new List<RecActividades>();
        }
        set { this.ViewState["listaActividades"] = value; }
    }



    #endregion

    #region CONSTRUCTOR

    public frmReclamo()
    {
        _recController = new ControllerRecReclamo();
    }
    
    #endregion

    #region EVENTOS DEL FORMULARIO

    //Cargar lista de estados
    protected void CargarEstados()
    {
        cmbEstado.Items.Clear();
        cmbEstado.Items.Add(new ListItem(Constantes.STATUS_SELECT, Constantes.CODE_SELECT));
        cmbEstado.Items.Add(new ListItem(Constantes.STATUS_OPEN, Constantes.CODE_OPEN));
        cmbEstado.Items.Add(new ListItem(Constantes.STATUS_CLOSE, Constantes.CODE_CLOSE));
    }

    protected void Page_Load(object sender, EventArgs e)
    {        
        if (!IsPostBack)
        {
            lblMensaje.CssClass = "";
            CargarLocal();
            CargarProducto();
            CargarEstados();
            Nuevo();                        
            verificarTipo();
        }
    }

    protected void Nuevo(){

        cmbLocal.Enabled = true;
        txtDNI.Enabled = true;
        txtNombres.Enabled = true;
        txtDescripcion.Enabled = true;        
        btnGuardar.Visible = true;

        lblCodigo.Text = "Autogenerado";
        hdCodigo.Value = "";
        txtDNI.Text = "";
        txtNombres.Text = "";
        txtDescripcion.Text = "";                
    }

    protected void verificarTipo(){
        String accion = (Session["reclamo_action"] == null) ? "" : Session["reclamo_action"].ToString();
        if (accion.Equals("visualizar"))
        {

            cmbLocal.Enabled = false;
            txtDNI.Enabled = false;
            txtNombres.Enabled = false;
            txtFechaInicio.Enabled = false;
            txtDescripcion.Enabled = false;
            btnGuardar.Visible = false;
            Cargar();
        }
        else if (accion.Equals("modificar")) 
        {
            cmbLocal.Enabled = false;
            txtDNI.Enabled = false;
            txtNombres.Enabled = false;
            txtFechaInicio.Enabled = false;
            txtDescripcion.Enabled = false;            
            btnGuardar.Visible = true;
            rbTipoBien.Enabled = false;
            cmbReclamo.Enabled = false;
            Cargar();
        }              
    }

    //Cargar datos de la hoja de reclamacion
    protected void Cargar() {
        int codigo = (Session["reclamo_codigo"] == null) ? 0 : Convert.ToInt32(Session["reclamo_codigo"].ToString());
        if (codigo > 0) {            
            RecReclamo lista = _recController.obtenerReclamo(codigo);

            if(lista!=null){
                txtDNI.Text = "";
                txtNombres.Text = "";
                txtDescripcion.Text = "";

                lblCodigo.Text = lista.IdReclamo.ToString();
                hdCodigo.Value = lista.IdReclamo.ToString();
                rbTipoBien.SelectedValue = lista.Tipo.ToString();
                cmbReclamo.SelectedValue = lista.NomProducto;
                txtFechaInicio.Text = lista.FecReclamo.ToString("dd/MM/yyyy");
                txtDNI.Text = lista.NumDNI.ToString();
                txtNombres.Text = lista.Nombres.ToString();
                txtDescripcion.Text = lista.Descripcion.ToString();
                cmbLocal.SelectedValue = lista.Local.IdLocal.ToString();
                lblNumero.Text = lista.NumeroTipo;
                cmbEstado.SelectedValue = lista.Estado.ToString();
                listaActividades = lista.listaActividades;
                CargarDetalleAct();
            }
        }
    }

    protected void CargarLocal()
    {
        List<GenLocal> lista = _recController.listarLocal();
        if (lista.Count > 0)
        {
            cmbLocal.DataSource = lista;
            cmbLocal.DataTextField = "nombre";
            cmbLocal.DataValueField = "idLocal";
            cmbLocal.DataBind();
            cmbLocal.Items.Insert(0, new ListItem(Constantes.STATUS_SELECT, Constantes.CODE_SELECT));
        }
        else
        {
            cmbLocal.Items.Clear();
        }
    }

    protected void CargarProducto()
    {
        List<RecTipoBienContratado> lista = _recController.listarBienes();
        if (lista.Count > 0)
        {
            cmbReclamo.DataSource = lista;
            cmbReclamo.DataTextField = "descripcion";
            cmbReclamo.DataValueField = "idTipoBien";
            cmbReclamo.DataBind();
            cmbReclamo.Items.Insert(0, new ListItem(Constantes.STATUS_SELECT, Constantes.CODE_SELECT));
        }
        else
        {
            cmbLocal.Items.Clear();
        }
    }

    protected Boolean Validar() {
        return true;
    }

    #endregion

    #region EVENTOS DE BOTONES

    protected void btnGuardar_Click(object sender, EventArgs e)
    {

        Boolean resultado = true;
        resultado = Validar();
        if (resultado)
        {

            String accion = (Session["reclamo_action"] == null) ? "" : Session["reclamo_action"].ToString();

            RecReclamo be = new RecReclamo();            
            be.Nombres = txtNombres.Text;
          
            be.Estado = (cmbEstado.SelectedValue == "") ? 0 : Int32.Parse(cmbEstado.SelectedValue);
            be.listaActividades = listaActividades;
            if (accion.Equals("modificar"))
            {
                be.IdReclamo = Int32.Parse(hdCodigo.Value);
                be.IdReclamo = _recController.actualizarReclamo(be);                
            }
            else {
                be.IdReclamo = _recController.insertarReclamo(be);                            
            }

            if (resultado)
            {
                Session["reclamo_rpta"] = 1;
                Response.Redirect("frmMtoReclamo.aspx");
            }
            else
            {
                lblMensaje.Text = Constantes.MSG_ERROR;
                lblMensaje.CssClass = "lblError";
            }
        }
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Session["reclamo_codigo"] = null;
        Session["reclamo_action"] = null;
        Session["reclamo_visible"] = null;
        Response.Redirect("frmMtoReclamo.aspx");
    }
    
    #endregion
    void CargarDetalleAct()
    {
        List<RecActividades> listaActividadesDet = listaActividades;
        gvCargos.DataSource = listaActividadesDet;
        gvCargos.DataBind();

    }
    protected void btnAgregarAct_Click(object sender, EventArgs e)
    {
        if (txtCodigoAct.Text == "")
        {
            List<RecActividades> listaActividadesDet = listaActividades;
            RecActividades obj = new RecActividades();
            obj.Fecha = txtFechaAct.Text;
            obj.Detalle = txtDetalleAct.Text;
            listaActividadesDet.Add(obj);
            listaActividades = listaActividadesDet;
            CargarDetalleAct();
        }
        else
        {
            RecActividades obj = new RecActividades();
            List<RecActividades> listaActividadesDet = listaActividades;
            obj = (RecActividades)listaActividadesDet[Int32.Parse(txtCodigoAct.Text)-1];
            obj.Fecha = txtFechaAct.Text;
            obj.Detalle = txtDetalleAct.Text;
            listaActividades = listaActividadesDet;
            CargarDetalleAct();
        }
        txtCodigoAct.Text = "";
        txtDetalleAct.Text = "";
        txtFechaAct.Text = "";
    }
    protected void btnCancelarAct_Click(object sender, EventArgs e)
    {
        txtCodigoAct.Text = "";
        txtDetalleAct.Text = "";
        txtFechaAct.Text = "";
    }
  
    protected void verModificarAct_OnClick(object sender, CommandEventArgs e)
    {
        string codigo = e.CommandArgument.ToString();
        txtCodigoAct.Text = codigo;
        RecActividades obj = new RecActividades();
        List<RecActividades> listaActividadesDet = listaActividades;
        obj = (RecActividades)listaActividadesDet[Int32.Parse(txtCodigoAct.Text)-1];
        txtDetalleAct.Text = obj.Detalle;
        txtFechaAct.Text = obj.Fecha;
        
    }

    protected void verEliminarAct_OnClick(object sender, CommandEventArgs e)
    {
        int codigo = (e.CommandArgument == null) ? 0 : Convert.ToInt32(e.CommandArgument.ToString());
        int resultado = 0;
        String StrResultado = "";
        try
        {
            List<RecActividades> listaActividadesDet = listaActividades;
            listaActividadesDet.RemoveAt(codigo -1);
            listaActividades = listaActividadesDet;
            CargarDetalleAct();
        }
        catch (Exception ex)
        {
            StrResultado = ex.Message.ToString();
        }

    }
}